package com.mcp.converter.domain.rule.conversion;

import com.mcp.converter.shared.enums.IncompatibilityType;
import com.mcp.converter.domain.converter.ConversionSuggestion;
import com.mcp.converter.shared.response.sql.SQLElement;

/**
 * 转换规则接口
 * 定义SQL转换规则的基本属性和方法
 */
public interface ConversionRule {
    
    /**
     * 获取规则ID
     * @return 规则ID
     */
    String getId();
    
    /**
     * 获取规则名称
     * @return 规则名称
     */
    String getName();
    
    /**
     * 获取规则描述
     * @return 规则描述
     */
    String getDescription();
    
    /**
     * 获取不兼容类型
     * @return 不兼容类型
     */
    IncompatibilityType getIncompatibilityType();
    
    /**
     * 获取转换建议
     * @return 转换建议
     */
    ConversionSuggestion getConversionSuggestion();
    
    /**
     * 检查是否匹配规则
     * @param target 检查目标
     * @return 是否匹配
     */
    boolean matches(Object target);
    
    /**
     * 执行转换
     * @param element SQL元素
     * @param context 转换上下文
     * @return 转换后的SQL片段
     */
    String convert(SQLElement element, ConversionContext context);
    
    /**
     * 转换上下文接口
     * 提供转换过程中需要的上下文信息
     */
    interface ConversionContext {
        /**
         * 获取原始SQL
         * @return 原始SQL
         */
        String getOriginalSQL();
        
        /**
         * 获取当前转换的SQL片段
         * @return 当前转换的SQL片段
         */
        String getCurrentSQL();
        
        /**
         * 添加转换详情
         * @param original 原始内容
         * @param converted 转换后内容
         * @param reason 转换原因
         */
        void addConversionDetail(String original, String converted, String reason);
    }
}
